<?php

/**
 * Simple Site
 *
 * LICENÇA
 *
 * Este arquivo é parte do programa Simple Site
 *
 * Simple Site é um software livre; você pode redistribui-lo e/ou modifica-lo
 * dentro dos termos da Licença Pública Geral GNU como publicada pela
 * Fundação do Software Livre (FSF); na versão 2 da Licença, ou (na sua opnião)
 * qualquer versão.
 *
 * Este programa é distribuido na esperança que possa ser  util, mas
 * SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer
 * MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para
 * maiores detalhes.
 *
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
 * programa, se não, escreva para a Fundação do Software Livre(FSF) Inc.,
 * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @category   Simple_Site
 * @package    Include
 * @license    http://www.gnu.org/licenses/gpl-2.0.html  GNU General Public License Version 2 (GPL 2)
 * @author     Alex Rodin <contato@alexrodin.com>
 */
/**
 * Impedindo acessos diretos a esse arquivo
 */
defined('SIMPLE_SITE') || header('Location: http://alexrodin.com/');

/**
 * Classe usada para o tratamento da renderização do site
 *
 * @category   Simple_Site
 * @package    Include
 * @license    http://www.gnu.org/licenses/gpl-2.0.html  GNU General Public License Version 2 (GPL 2)
 * @author     Alex Rodin <contato@alexrodin.com>
 */
class Render
{

    /**
     * Renderiza um card de conteúdo , recebe como parametro um array associativo
     * com os seguintes índices:
     * -content             : Conteudo do card
     * -id                  : Id do card atual
     * -next_card_name      : Id do proximo card para geração do botao
     * -previous_card_name  : Id do card anterior para geração do botao
     * 
     * @param array $data
     * @return string
     */
    protected function _renderCard(array $data)
    {
        if (!isset($data) || !is_array($data))
        {
            throw new Exception('Parametro $data é obrigatório e deve ser um array');
        }

        $content = (isset($data['content'])) ? trim($data['content']) : '';
        $name = (isset($data['name'])) ? trim($data['name']) : (string) rand();
        $nextCardName = (isset($data['next_card_name'])) ? trim($data['next_card_name']) : false;
        $nextCardTitle = (isset($data['next_card_title'])) ? trim($data['next_card_title']) : false;
        $previousCardName = (isset($data['previous_card_name'])) ? trim($data['previous_card_name']) : false;
        $previousCardTitle = (isset($data['previous_card_title'])) ? trim($data['previous_card_title']) : false;

        // Renderizando o card
        ob_start();
        include 'Render/Card.php';
        $output = ob_get_clean();


        return $output;
    }

    /**
     * Faz o parsing e renderiza todas as páginas passadas no array
     * 
     * @param array $pages
     * @return string
     */
    static function renderPages(array $pages)
    {
        if (!isset($pages) || !is_array($pages))
        {
            throw new Exception('Parâmetro $pages é obrigatório e deve ser um array');
        }


        // Quantidade de cards para renderizar
        $numOfPage = count($pages);

        // Conteudo renderizado
        $output = '';

        for ($i = 0; $i < $numOfPage; $i++)
        {
            // Obtém o nome da página, usado como id do card
            $card = $pages[$i];
            $title = $card['title'];


            // Captura o conteúdo do card
            ob_start();
            include 'Content/' . PROFILE . '/' . $card['name'] . '.phtml';
            $cardContentBuffer = ob_get_clean();

            // Obtendo o id do card anterior
            if ($i > 0)
            {
                $previousCard = $pages[$i - 1];
                $previousCardName = $previousCard['name'];
                $previousCardTitle = $previousCard['title'];
            } else
            {
                // No primeiro card
                $previousCardName = false;
                $previousCardTitle = 'Previous';
            }

            // Obtendo o id do próximo card
            if ($i < $numOfPage - 1)
            {
                $nextCard = $pages[$i + 1];
                $nextCardName = $nextCard['name'];
                $nextCardTitle = $nextCard['title'];
            } else
            {
                // No último card
                $nextCardName = false;
                $nextCardTitle = 'Next';
            }

            // Passando os dados para a renderização do card
            $cardData = array();
            $cardData['name'] = $card['name'];
            $cardData['content'] = $cardContentBuffer;
            $cardData['next_card_name'] = $nextCardName;
            $cardData['next_card_title'] = $nextCardTitle;
            $cardData['previous_card_name'] = $previousCardName;
            $cardData['previous_card_title'] = $previousCardTitle;

            $output.= self::_renderCard($cardData);
        }

        return $output;
    }

}
